Server-Driven UI
SDUI
#wip
A Deep Dive into Airbnb’s Server-Driven UI System | by Ryan Brooks | The Airbnb Tech Blog | Medium
Airbnbが提唱しているらしい
2021年
Ghost PlatformというSDUIシステムを作ったと
Web、iOS、Androidのいずれもで同じUIを出したい、という前提を抑えているとわかりやすい
Web, iOS, Androidのいずれもで同じGraphQL Schemaでリクエストする
個々の画面をGraphQL Schemaで記述するような感じになるんだろうか?
構成要素
https://gyazo.com/2efaffd275d9a5e1eea69ddf4a42c991
Screen
画面のレイアウト
footerとか
Section
UIの基本的な構成要素
表示する際のデータと一緒にUIロジックを含み、クライアントでUIに変換される
code:ts
interface GPResponse {
sections: SectionContainer
screens: ScreenContainer
}
https://gyazo.com/74698bdbc2ce872606c2d72cd7ce41c2
サーバがUIとUIのロジックも返却し、クライアントはただそれをUIに変換して表示するだけ
バックエンドで全てを制御する
クライアントで状態管理などをしない
任意のUIを制御できるという感じではなくて、予め用意していたComponetに対して、
内容やロジックや見た目や順序をサーバから制御する感じかな
特にモバイルアプリを作っていることをイメージするとわかりやすそうmrsekut.icon
モバイルアプリのクライアント側のロジックは、アプリのバージョンを更新しないと反映できない
これをserverが制御できるなら嬉しい
React Server Componentsと割と発想が近い
こういうのと相性が良さそう
モバイルアプリ
管理画面みたいにカスタマイズ性が求められるUI
ABテスト
複雑なUIを作ろうとすると厳しそう
普通のサイトなら特に採用するモチベがなさそう
プロダクトのスケールを見据えてServer-Driven UIを採用してみる
Ubie, incはこれを採用したらしい
【メモ】Server-Driven UIについて
https://speakerdeck.com/sonatard/jetpackcompose-grahpql-serverdrivernui
https://techblog.gaudiy.com/entry/2022/07/29/090000
https://tom.lokhorst.eu/2020/07/server-driven-ui
https://www.builder.io/blog/ui-over-apis
https://www.judo.app/blog/server-driven-ui
https://shopify.engineering/server-driven-ui-in-shop-app